A microprocessor-based system typically consists of a microprocessor connected to operate in conjunction with a variety of discrete peripheral computer components such as a microprocessor or CPU, different types of memory, UARTs, power management hardware, PCMCIA controllers, etc. Each component has a signal interface defined by a set of electrical contacts and by specified electrical and logical characteristics for those electrical contacts.
It is possible to design a microprocessor-based system in a way which allows for easy addition of components. The typical home PC is an example of such a system. It is expandable through a bus, to which add-on cards can be connected as long as the add-on cards are electrically compatible with the bus.
A disadvantage of bus-based systems is that they are not usually as compact as might otherwise be possible. When designing compact devices such as personal information managers, cell phones, palmtop computers, etc., expandability is often sacrificed for compactness. Components are highly integrated into as few chips as possible. In fact, it is becoming more and more common for functions to be integrated into a single chip along with a system CPU. This approach makes it difficult to change or add components.
This type of architecture also affects the development cycle. During typical development of a highly integrated system, components, features, and designs are selected only after much deliberation. This selection process generally precedes any actual hardware integration. Once the various selections are made, everything is integrated as much as possible. This is often done in a way that makes changes difficult--once something is designed in, it becomes inter-related with other system features at very low levels of design.
The interface logic between different discrete components is one reason why changes become difficult once a system is designed. Interface logic, commonly referred to as "glue logic," is necessary because different components typically have different signal interfaces. Interface logic is necessary to "translate" between the different interfaces. In modem designs, this logic is integrated on an application-specific integrated circuit (ASIC) such as a field-programmable gate array (FPGA). An example of a resulting system is shown in FIG. 1.
FIG. 1 shows a CPU 2 in combination with three peripheral components: a RAM memory component 3; a ROM memory component 4, and a serial communications component 5. An ASIC 6 is used to connect the various components so that they can communicate with each other.
ASIC 6 is configured in accordance with the logical and electrical characteristics of the various components' signal interfaces. This is commonly accomplished by configuring a number of individual ASIC external interfaces 7, each tailored specifically to work with its respective component. The ASIC external interfaces are also configured to work with each other, possibly using internal busses or data channels, so that communications between the components can take place. Using this approach, the interfaces and their connections to other interfaces are uniquely designed for every new product, in whatever way meets the particular designer's goals of time, cost, power consumption, etc. Once the design is complete, changes are difficult. The glue logic designed for one product is custom, and not easily used in another product.
Particularly when a gate array is used to implement interfaces between discrete components, the various functions of the gate array become so intertwined as to virtually preclude any significant modifications once the design effort is complete. Unless an expansion bus of some kind is implemented on the system, adding or changing peripheral components is a difficult design task.